System level EDA tools allow a designer to model, simulate, and analyze system algorithms. Tools such as Simulink® from MathWorks® allow designers to create, simulate, evaluate, and refine a system design through standard and custom block libraries. A system design may include registered (synchronous) nodes, concurrent (combinatorial) nodes, or a combination of registered and concurrent nodes. A registered node may be, for example, any node that processes its input and makes the resultant output visible on subsequent clock cycles(s) but without any immediately visible change. A concurrent node may be, for example, any combinatorial logic that processes its input and makes the resultant output visible during the same clock cycle the input was received.
Various methods of simulation exist for registered and concurrent designs. For fully registered systems, a static scheduler may be used to simulate clock cycle steps where a predetermined order in which nodes can be simulated is determined to avoid dependencies. This approach does not work for concurrent nodes since the static scheduler is unable to deal with concurrent feedback loops. For concurrent systems, a scheduler that iterates the simulation for a large number of cycles per clock cycle step may be used. The excessive iterations allow concurrent feedback loops to stabilize to their proper values.
In the past, for system designs having a combination of registered and concurrent nodes, concurrent system simulation techniques were used in order to address concurrent feedback loops. This approach, however, was inefficient when a large number of registered nodes were present in the system design. Excessive simulation iterations on nodes that did not contribute to concurrent feedback loops consumed additional computing resources and required a significant amount of time which resulted in slowing the design cycle which was undesirable.
Thus, what is needed is an efficient method and apparatus for simulating a hybrid system with registered and concurrent nodes.